Azure API Center で Amazon API Gateway 統合機能がプレビューリリースされていたので使ってみた
いわさです。
Microsoft Azure には Azure API Center という、組織の API を一元的に管理するためのサービスがあります。
Azure や他のクラウドプロバイダー、あるいはオンプレミスなど、様々な環境の API を管理することができるのですが、先日のアップデートで Amazon API Gateway と統合できるようになりました。この機能によって自動で AWS アカウント上の API を検出して管理したり、自動更新させたりすることができるようになりそうです。
Azure CLI の API Center 拡張のプレビューバージョンを導入する
まず、本日時点で本機能は Azure ポータル上から統合追加を行うことができません。Azure CLI を使って追加します。
Azure API Center は Azure CLI のapic-extension
という拡張機能です。
今回のアップデートはそちらの1.2.0b1
バージョンで追加された機能となっています。
ということで Azure CLI およびapi-extension
のプレビューバージョン導入を行います。
今回検証に使った私の環境ですが、Azure CLI バージョンが少し古い2.67.0
で、api-extension
は未導入の環境でした。
% az --version
azure-cli 2.67.0 *
core 2.67.0 *
telemetry 1.1.0
Extensions:
containerapp 1.1.0b1
Dependencies:
:
% az apic
'apic' is misspelled or not recognized by the system.
Did you mean 'apim' ?
Examples from AI knowledge base:
https://aka.ms/cli_ref
Read more about the command in reference docs
ということで Azure CLI のバージョンアップとapi-extension
のインストールを行います。
az extension add --name apic-extension
で拡張機能のインストールが出来るのですが最初プレビュー機能だということを失念しており 1.1.0 をインストールしてしまいました。
% az upgrade
This command is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
Your current Azure CLI version is 2.67.0. Latest version available is 2.68.0.
Please check the release notes first: https://docs.microsoft.com/cli/azure/release-notes-azure-cli
Do you want to continue? (Y/n):
==> Updating Homebrew...
==> Downloading https://ghcr.io/v2/homebrew/portable-ruby/portable-ruby/blobs/
:
% az extension add --name apic-extension
Extension 'apic-extension' has a later preview version to install, add `--allow-preview True` to try preview version.
% az --version
azure-cli 2.68.0
core 2.68.0
telemetry 1.1.0
Extensions:
apic-extension 1.1.0
containerapp 1.1.0b1
:
--allow-preview True
オプションをつけることでプレビューバージョンのインストールが可能です。
1.2.0b1
へ更新することができました。
% az extension update --name apic-extension --allow-preview True
% az --version
azure-cli 2.68.0
core 2.68.0
telemetry 1.1.0
Extensions:
apic-extension 1.2.0b1
containerapp 1.1.0b1
:
操作するためのクライアント環境はこれで良さそうです。
Amazon API Gateway と統合
続いて Azure と AWS の統合を行っていきます。
事前に Azure API Center は作成済みで、今回は機能検証用途のため Free trial プランを使っています。
Azure API Center から AWS へアクセスできるようにする
本機能の裏側ですが、Azure API Center が AWS の IAM を使って Amazon API Gateway の情報を AWS API 経由で定期的に取得して API 情報を更新するような形となっています。
そのため、まずは Azure に AWS の操作権限を与える必要がありまして、AWS 上で IAM ユーザーを払い出し、アクセスキーとシークレットを Azure Vault に格納します。そしてその Vault へのアクセスを API Center に許可するという形となります。
AWS 側で IAM ユーザーの作成とアクセスキー、シークレットキーの払い出しを行う方法は本記事では割愛しますので、以下などを参考にしてください。
作成できたら、aws-access-key
とaws-secret-access-key
の 2 つのシークレットを Vault 上に作成し値として保存しておきます。
つづいて、その Vault に Azure API Center がアクセスできる必要がありますので、Azure API Center のマネージド ID を有効化し、上記 Vault へのアクセス権限を割り当てます。
まずは Azure API Center でマネージド ID を有効化します。
続いて先ほどの Vault の IAM からKey Vault Secrets User
ロールを割り当てました。
ちなみに Azure 公式ドキュメント上には AWS 上の IAM ユーザーにどういうポリシーが必要なのかが明記されておらず少し困りました。
私調べでは以下の API Gateway アクションを定期的に実行するようなので、このあたりを参考にポリシーのアクションを絞ってみてください。
Amazon API Gateway を用意して統合させる
統合を作成する準備が出来たので、実際に使ってみましょう。
コマンドは後述しますが、ひとつの統合ごとに AWS リージョンを指定する形です。API Gateway リソースを指定するオプションはないようで、おそらく対象 AWS アカウントの指定したリージョン内の REST API 情報をごそっと引っ張ってくる仕組みのようです。
ということで AWS 上では次のようにバージニア北部リージョン(us-east-1)上に適当な API が 3 つある状態から開始します。
ちなみに本機能で統合できるのは REST API のみのようなので HTTP や WebSocket には使えないみたいです。
統合コマンドについてはこちらに記載されています。
% az apic integration create aws --resource-group hoge0125api --service-name hoge0125api --integration-name hoge0126azureaws --aws-access-key-reference https://hoge0126aws.vault.azure.net/secrets/aws-access-key/1b4d1efc422f409c8e48a7fb83714d16 --aws-secret-access-key-reference https://hoge0126aws.vault.azure.net/secrets/aws-secret-access-key/d3554a8270e649aea3c0a69a9b7af0e8 --aws-region-name us-east-1
This command is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
"amazonApiGatewaySource": {
"accessKey": "https://hoge0126aws.vault.azure.net/secrets/aws-access-key/1b4d1efc422f409c8e48a7fb83714d16",
"msiResourceId": "730f026b-fe6c-45b4-b023-b30eac257188/763f62f0-7624-4494-a361-d66c6795649c/systemAssigned",
"regionName": "us-east-1",
"secretAccessKey": "https://hoge0126aws.vault.azure.net/secrets/aws-secret-access-key/d3554a8270e649aea3c0a69a9b7af0e8"
},
"apiSourceType": "AmazonApiGateway",
"id": "/subscriptions/a50aeedb-979c-428f-8b2d-28974d5e3d3b/resourceGroups/hoge0125api/providers/Microsoft.ApiCenter/services/hoge0125api/workspaces/default/apiSources/hoge0126azureaws",
"importSpecification": "always",
"linkState": {
"lastUpdatedOn": "2025-01-25T21:27:19.0061414Z",
"state": "initializing"
},
"name": "hoge0126azureaws",
"resourceGroup": "hoge0125api",
"systemData": {
"createdAt": "2025-01-25T21:27:19.0061412Z",
"lastModifiedAt": "2025-01-25T21:27:19.0061403Z"
},
"targetEnvironmentId": "/workspaces/default/environments/amazon-api-gateway",
"targetLifecycleStage": "design",
"type": "Microsoft.ApiCenter/services/workspaces/apiSources"
}
コマンドは一瞬で完了しました。
Azure ポータルから API Center を眺めてみると...おっ追加されていますね。
Environments として今回統合として追加した環境が自動で作成されていました。名称は Amazon API Gateway 固定みたいです。なるほど。
今後統合したリージョンとか AWS アカウントが増えるとちょっと管理しにくくなるかもしれない。Environments はコマンドオプションで指定可能っぽかったので、管理しやすいように事前に作成しておくと良さそうです。
API 定義も次のように確認が出来ました。良いですね。
Amazon API Gateway で新規 API を作成
この統合機能は 1 時間に 1 回程度の頻度で API 情報の更新を行ってくれるみたいです。
試しに Amazon API Gateway 側に新規 API を追加してみましょう。
その後 30 分ほどで Azure API Center 側に新しく追加した API の情報が自動同期されていました。良いですね。
さいごに
本日は Azure API Center で Amazon API Gateway 統合機能がプレビューリリースされていたので使ってみました。
マルチクラウドのハブとして Microsoft Azure のいくつかのサービスを活用するのは私は結構好きでして、この API Center の Amazon API Gateway 統合もなかなかおもしろい機能だと思いました。
今回使っていないですが、API Center には API が組織のルールに準拠しているか分析する機能があります。外部の Amazon API Gateway で管理されている API にも一元的にガバナンスを効かせれそうで、活用できるケースが多そうだと感じました。